/*
 * esp8266.h
 *
 *  Created on: 2021年9月4日
 *      Author: LF
 */

#ifndef INC_ESP8266_H_
#define INC_ESP8266_H_


#include <stdio.h>


#define wifi_huart		&huart2    /*wifi 模块使用的串口 */
#define g_wifi_rxbuf	g_uart2_rxbuf /*wifi 模块的接收buffer */
#define g_wifi_rxbytes	g_uart2_bytes /* wifi 模块接收的数据大小  */


// 清除WIFI模块buffer里的数据内容宏，用宏而不是函数是因为函数需要调用额外的时间
#define clear_atcmd_buf()		do{ memset(g_wifi_rxbuf, 0, sizeof(g_wifi_rxbuf));\
									g_wifi_rxbytes = 0;} while(0)

//ESP8266 wifi模块发送AT指令函数。 返回值为0则为成功，返回值为！0则失败
#define	EXPECT_OK		"OK\r\n"
extern int send_atcmd(char *atcmd, char *expect_reply, unsigned int timeout);

//ESP8266 WiFi模块初始化函数。 返回值 0 成功，！0 失败
extern int esp8266_module_init(void);

//ESP8266 WiFi模块复位重启函数。 返回值 0 成功，！0 失败
extern int esp8266_module_reset(void);

//ESP8266 WiFi模块连接路由器函数。 返回值 0 成功，！0 失败
extern int esp8266_join_network(char *ssid, char *pwd);

//ESP8266 获取自己的IP地址和网关IP地址。返回值 0 成功，！0 失败
int esp8266_get_ipaddr(char *ipaddr, char *gateway, int ipaddr_size);

//ESP8266 WiFi模块做平命令测试网络连通性。返回值 0 成功，！0 失败
int esp8266_ping_test(char *host);

//ESP8266 WiFi模块建立TCP socket 连接函数。返回值 0 成功，！0 失败
extern int esp8266_sock_connect(char *servip, int port);

//ESP8266 WiFi模块断开TCP socket 连接函数。返回值 0 成功，！0 失败
extern int esp8266_sock_disconnect(void);

//ESP8266 WiFi通过TCP socket 发送数据的函数。 返回值 0 表示失败，大于0 成功发送字节数
extern int esp8266_sock_send(unsigned char *data, int bytes);

//ESP8266 WiFi通过TCP socket 接收数据函数。 返回值 0 无数据，大于0 成功接收数据字节数
extern int esp8266_sock_recv(unsigned char *buf, int size);


#endif /* INC_ESP8266_H_ */
